package com.member.shop.service;

import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.member.common.exception.ServiceException;
import com.member.shop.domain.SysBizUser;
import com.member.shop.dto.*;
import com.member.shop.vo.*;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;

/**
 * 用户列表Service接口
 *
 * @author lixinchen
 * @date 2024-12-28
 */
public interface ISysBizUserService extends IService<SysBizUser> {
    /**
     * 查询用户列表
     *
     * @param id 用户列表主键
     * @return 用户列表
     */
    public SysBizUser selectSysBizUserById(Long id);

    /**
     * 查询用户列列表
     *
     * @param queryWrapper 用户列
     * @return 用户列集合
     */
    public List<SysBizUser> selectSysBizUserList(LambdaQueryWrapper<SysBizUser> queryWrapper);

    /**
     * 查询用户列表列表
     *
     * @param sysBizUser 用户列表
     * @return 用户列表集合
     */
    public List<SysBizUser> selectSysBizUserList(SysBizUser sysBizUser);

    /**
     * 新增用户列表
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    public int insertSysBizUser(SysBizUser sysBizUser);

    /**
     * 修改用户列表
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    public int updateSysBizUser(SysBizUser sysBizUser) throws IOException;

    /**
     * 批量删除用户列表
     *
     * @param ids 需要删除的用户列表主键集合
     * @return 结果
     */
    public int deleteSysBizUserByIds(Long[] ids);

    /**
     * 删除用户列表信息
     *
     * @param id 用户列表主键
     * @return 结果
     */
    public int deleteSysBizUserById(Long id);

    /**
     * 是否存在该手机号
     *
     * @param userPhone 是否存在该手机号
     * @return 结果 true 存在 false 不存在
     */
    boolean hasUserPhone(String userPhone);

    /**
     * 查询管理员列表
     *
     * @param sysBizUser 用户列表
     * @return 用户列表集合
     */
    List<SysBizUser> selectSysBizUserAdminList(SysBizUser sysBizUser);

    SysBizUser login(WxMaPhoneNumberInfo phoneNoInfo, WxLoginDto entity) throws ServiceException;

    SysBizUser registerUser(RegisterMemberDto registerMemberDto) throws ServiceException;


    /**
     * 审核
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    int processSysBizUser(SysBizUser sysBizUser);


    /**
     * 查询用户审核列表
     *
     * @param sysBizUser 用户审核列表
     * @return 结果
     */
    List<SysBizUser> selectSysBizUserProcessList(SysBizUser sysBizUser);

    /**
     * 查询用户列表(全部)
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    List<SysBizUserVo> selectSysBizUserListAll(SysBizUser sysBizUser);

    /**
     * 查询用户列表(Child全部)
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    List<SysBizUserVo> listChild(SysBizUser sysBizUser);

    /**
     * 查询会员团队核实列表
     *
     * @param sysBizUser 会员团队核实列表
     * @return 结果
     */
    List<SysBizUserVerifyVo> listVerify(SysBizUser sysBizUser);

    /**
     * 核实
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    int editVerify(SysBizUser sysBizUser);

    /**
     * 查询用户列列表(上下级关系树)
     *
     * @param sysBizUser 用户列表
     * @return 结果
     */
    SysBizUserTreeVo upLowerLevel(SysBizUser sysBizUser);

    UserVo queryUserById(Long userId);

    void withdrawal(SysBizUser sysBizUser, BigDecimal amount);

    /**
     * 首页统计
     */
    OverviewVo overview(OverviewDto overviewDto);

    /**
     * 批量注册会员
     */
    int importUser(List<SysBizUser> userList, boolean updateSupport, String operName) throws IOException;

    /**
     * 批量充值金额
     */
    int registerImportData(List<SysBizUser> userList, boolean updateSupport, String operName);

    void updateMemberInfoByNull(Long userId);

    /**
     * 修改管理员列表
     */
    int updateSysBizUserAdmin(SysBizUser sysBizUser);

    //导出
    List<SysBizUserExportVo> selectSysBizUserListExportAll(SysBizUser sysBizUser);

    List<Long> findBySubordinate(SysBizUser user);

    List<Long> findBySuperior(SysBizUser user);

    int surplusPUT(SysBizUser sysBizUser);

    List<UpLowerLevelExportVo> selectUpLowerLevelExport();

    SysBizUser verificationCode(VerificationCodeLoginDto verificationCodeLoginDto);

    SysBizUser loginByPassword(PasswordLoginDto passwordLoginDto, SysBizUser user);

    void updatePassword(UpdatePasswordDto updatePasswordDto, SysBizUser sysBizUser);

    List<DevelopUserP2Vo> queryDevelopUserP2(DevelopUserP2Dto developUserP2Dto, Integer level, Long userId);

    List<SysBizUser> listUserSales(SysBizUser sysBizUser);
}

